package com.pkche.core.advanced.reprint;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import com.pkche.core.advanced.reprint.extract.ArticleExtractor;

/**
 * 网络文章载入器<br/>
 * Describe：传入URL，尝试获取并解析网络上的文章，并把解析的结果封装成{@link NetArticle} 对象返回<br />
 * User："Qiang" <br/>
 * Time：2015年2月13日 下午12:59:40 <br/>
 */
public class NetArticleLoader {
	private int timeout = 3000;

	/**
	 * 生成一个抽取器实例
	 * 
	 * @return
	 */
	public static NetArticleLoader create() {
		return new NetArticleLoader();
	}

	/**
	 * 设置超时允许的时间
	 * 
	 * @param millis
	 * @return
	 */
	public NetArticleLoader timeout(int millis) {
		timeout = millis;
		return this;
	}

	/***
	 * 尝试解析URL，并返回一个匹配的文章抽取器
	 * 
	 * @param url
	 *            资源位置字符串
	 * @return
	 * @throws java.net.MalformedURLException
	 *             如果URL不合法，抛出此异常
	 * @throws java.io.IOException
	 *             如果从网络下载文章的过程中出现任何问题，抛出此异常
	 * @throws NotFoundExtractException
	 *             如果无法找到适合此URL的匹配器，抛出此异常
	 */
	public ArticleExtractor extract(String url) throws MalformedURLException,
			IOException, NotFoundExtractException {
		url = url.replace("\r\n", "");
		URL resource = new URL(url);
		ArticleExtractor ext = ExtractorFactory.get(resource, timeout);
		if (ext == null) {
			throw new NotFoundExtractException(url);
		}
		return ext;
	}
}
